﻿/* $HeadURL: http://ws201075/svn/deg/dotNet/trunk/Pegasus/src/HostApplicationForm.cs $
-----------------------------------------------------------------------------
        (c) by Martin Blankenstein

Dieses Dokument und die hierin enthaltenen Informationen unterliegen
dem Urheberrecht und duerfen ohne die schriftliche Genehmigung des
Herausgebers weder als ganzes noch in Teilen dupliziert oder reproduziert
noch manipuliert werden.

-----------------+------------------------------------------------------------
Version          : $Revision: 450 $
-----------------+------------------------------------------------------------
Last Change      : $LastChangedDate: 2009-02-23 18:26:54 +0100 (Mo, 23 Feb 2009) $
-----------------+------------------------------------------------------------
Last User        : $LastChangedBy: NLBERLIN\mblankenstein $
-----------------+------------------------------------------------------------
Beschreibung     :
-----------------+ 

-----------------+------------------------------------------------------------
Updates          :
-----------------+

$Id: HostApplicationForm.cs 450 2009-02-23 17:26:54Z NLBERLIN\mblankenstein $

*/

using System;
using PaintTogetherServer.Messages.Adapter;

namespace PaintTogetherServer.Contracts.Core
{
    /// <summary>
    /// Verwaltet die aktuell an der Malerei beteiligten Personen
    /// </summary>
    internal interface IPtPlayerListManager
    {
        /// <summary>
        /// Beauftragt die Benachrichtung aller Beteiligten über einen neuen
        /// Beteiligten
        /// </summary>
        event Action<NotifyNewClientMessage> OnNotifyNewClient;

        /// <summary>
        /// Beauftrag die noch verbundenen Clients über einen
        /// getrennten Beteiligten zu informieren
        /// </summary>
        event Action<NotifyClientDisconnectedMessage> OnNotifyClientDisconnected;

        /// <summary>
        /// Verarbeitet einen neu verbundenen Beteiligten
        /// </summary>
        /// <param name="message"></param>
        void ProcessNewClientMessage(NewClientConnectedMessage message);

        /// <summary>
        /// Verarbeitet einen nicht mehr beteiligten Nutzer
        /// </summary>
        /// <param name="message"></param>
        void ProcessClientDisconnectedMessage(ClientDisconnectedMessage message);

        /// <summary>
        /// Setzt im Result der Anfrage die Informationen über die aktuellen
        /// Beteiligten 
        /// </summary>
        /// <param name="request"></param>
        void ProcessGetCurrentPainterRequest(GetCurrentPainterRequest request);
    }
}
